package com.msunsoft.stepsmetrics;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.pentaho.di.core.Const;
import org.pentaho.di.i18n.BaseMessages;
import org.pentaho.di.trans.TransMeta;
import org.pentaho.di.trans.step.BaseStepMeta;
import org.pentaho.di.trans.step.StepDialogInterface;
import org.pentaho.di.trans.step.StepMeta;
import org.pentaho.di.ui.core.PropsUI;
import org.pentaho.di.ui.core.widget.ColumnInfo;
import org.pentaho.di.ui.core.widget.TableView;
import org.pentaho.di.ui.core.widget.TextVar;
import org.pentaho.di.ui.trans.step.BaseStepDialog;


public class StepsMetricsDialog extends BaseStepDialog implements StepDialogInterface
{
	private static Class<?> PKG = StepsMetrics.class; // for i18n purposes, needed by Translator2!!   $NON-NLS-1$

	private static final String[] YES_NO_COMBO = new String[] { BaseMessages.getString(PKG, "System.Combo.No"), BaseMessages.getString(PKG, "System.Combo.Yes") };
	
	private String previousSteps[] ;
	private StepsMetricsMeta input;

	private Label        wlFields;
	private TableView    wFields;
	private FormData     fdlFields, fdFields;
	
	private CTabFolder   wTabFolder;
	private FormData     fdTabFolder;
	
	private CTabItem     wGeneralTab,wFieldsTab;
	
	private FormData     fdGeneralComp,fdFieldsComp;
	
	private Label        wlStepnameField;
	private TextVar      wStepnameField;
	private FormData     fdlStepnameField, fdStepnameField;
	
	private Label        wlStepidField;
	private TextVar      wStepidField;
	private FormData     fdlStepidField, fdStepidField;
	
	private Label        wlLinesinputField;
	private TextVar      wLinesinputField;
	private FormData     fdlLinesinputField, fdLinesinputField;
	
	private Label        wlLinesoutputField;
	private TextVar      wLinesoutputField;
	private FormData     fdlLinesoutputField, fdLinesoutputField;
	
	private Label        wlLinesreadField;
	private TextVar      wLinesreadField;
	private FormData     fdlLinesreadField, fdLinesreadField;
	
	private Label        wlLineswrittenField;
	private TextVar      wLineswrittenField;
	private FormData     fdlLineswrittenField, fdLineswrittenField;
	
	private Label        wlLineserrorsField;
	private TextVar      wLineserrorsField;
	private FormData     fdlLineserrorsField, fdLineserrorsField;
	
	private Label        wlSecondsField;
	private TextVar      wSecondsField;
	private FormData     fdlSecondsField, fdSecondsField;
	
	private Label        wlLinesupdatedField;
	private TextVar      wLinesupdatedField;
	private FormData     fdlLinesupdatedField, fdLinesupdatedField;
	
	
	public StepsMetricsDialog(Shell parent, Object in, TransMeta tr, String sname)
	{
		super(parent, (BaseStepMeta)in, tr, sname);
		input=(StepsMetricsMeta)in;
	}

	public String open()
	{
		Shell parent = getParent();
		Display display = parent.getDisplay();

		shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.RESIZE | SWT.MIN | SWT.MAX);
 		props.setLook(shell);
 		setShellImage(shell, input);
        
		ModifyListener lsMod = new ModifyListener() 
		{
			public void modifyText(ModifyEvent e) 
			{
				input.setChanged();
			}
		};
		changed = input.hasChanged();

		FormLayout formLayout = new FormLayout ();
		formLayout.marginWidth  = Const.FORM_MARGIN;
		formLayout.marginHeight = Const.FORM_MARGIN;

		shell.setLayout(formLayout);
		shell.setText(BaseMessages.getString(PKG, "StepsMetricsDialog.Shell.Title")); 
		
		int middle = props.getMiddlePct();
		int margin = Const.MARGIN;

		// Stepname line
		wlStepname=new Label(shell, SWT.RIGHT);
		wlStepname.setText(BaseMessages.getString(PKG, "StepsMetricsDialog.Stepname.Label")); 
 		props.setLook(wlStepname);
		fdlStepname=new FormData();
		fdlStepname.left = new FormAttachment(0, 0);
		fdlStepname.right= new FormAttachment(middle, -margin);
		fdlStepname.top  = new FormAttachment(0, margin);
		wlStepname.setLayoutData(fdlStepname);
		wStepname=new Text(shell, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
		wStepname.setText(stepname);
 		props.setLook(wStepname);
		wStepname.addModifyListener(lsMod);
		fdStepname=new FormData();
		fdStepname.left = new FormAttachment(middle, 0);
		fdStepname.top  = new FormAttachment(0, margin);
		fdStepname.right= new FormAttachment(100, 0);
		wStepname.setLayoutData(fdStepname);
		
		wTabFolder = new CTabFolder(shell, SWT.BORDER);
 		props.setLook(wTabFolder, PropsUI.WIDGET_STYLE_TAB);
 		
		//////////////////////////
		// START OF GENERAL TAB///
		///
		wGeneralTab=new CTabItem(wTabFolder, SWT.NONE);
		wGeneralTab.setText(BaseMessages.getString(PKG, "StepsMetricsDialog.General"));
		Composite wGeneralComp = new Composite(wTabFolder, SWT.NONE);
 		props.setLook(wGeneralComp);
		FormLayout fileLayout = new FormLayout();
		fileLayout.marginWidth  = 3;
		fileLayout.marginHeight = 3;
		wGeneralComp.setLayout(fileLayout);
		
        // Get the previous steps...
        setStepNames();
        
		wOK=new Button(shell, SWT.PUSH);
		wOK.setText(BaseMessages.getString(PKG, "System.Button.OK"));
		wGet=new Button(shell, SWT.PUSH);
		wGet.setText(BaseMessages.getString(PKG, "StepsMetricsDialog.getSteps.Label"));
		wCancel=new Button(shell, SWT.PUSH);
		wCancel.setText(BaseMessages.getString(PKG, "System.Button.Cancel"));

		setButtonPositions(new Button[] { wOK, wGet, wCancel }, margin, null);
        
	
        // Table with fields
		wlFields=new Label(wGeneralComp, SWT.NONE);
		wlFields.setText(BaseMessages.getString(PKG, "StepsMetricsDialog.Fields.Label"));
 		props.setLook(wlFields);
		fdlFields=new FormData();
		fdlFields.left = new FormAttachment(0, 0);
		fdlFields.top  = new FormAttachment(wStepname, margin);
		wlFields.setLayoutData(fdlFields);
		
		final int FieldsCols=3;
		final int FieldsRows=input.getStepName().length;
		
		ColumnInfo[] colinf=new ColumnInfo[FieldsCols];
		colinf[0]=new ColumnInfo(BaseMessages.getString(PKG, "StepsMetricsDialog.Fieldname.Step"),  ColumnInfo.COLUMN_TYPE_CCOMBO,  previousSteps, false);
		colinf[1]=new ColumnInfo(BaseMessages.getString(PKG, "StepsMetricsDialog.Fieldname.CopyNr"),  ColumnInfo.COLUMN_TYPE_TEXT, false);
		colinf[2]=new ColumnInfo(BaseMessages.getString(PKG, "StepsMetricsDialog.Required.Column"), ColumnInfo.COLUMN_TYPE_CCOMBO,  YES_NO_COMBO );
		colinf[1].setUsingVariables(true);
		wFields=new TableView(transMeta, wGeneralComp, 
							  SWT.BORDER | SWT.FULL_SELECTION | SWT.MULTI, 
							  colinf, 
							  FieldsRows,  
							  lsMod,
							  props
							  );

		fdFields=new FormData();
		fdFields.left  = new FormAttachment(0, 0);
		fdFields.top   = new FormAttachment(wlFields, margin);
		fdFields.right = new FormAttachment(100, 0);
		fdFields.bottom= new FormAttachment(100, -2*margin);
		wFields.setLayoutData(fdFields);
		
		fdGeneralComp=new FormData();
		fdGeneralComp.left  = new FormAttachment(0, 0);
		fdGeneralComp.top   = new FormAttachment(0, 0);
		fdGeneralComp.right = new FormAttachment(100, 0);
		fdGeneralComp.bottom= new FormAttachment(100, 0);
		wGeneralComp.setLayoutData(fdGeneralComp);
	
		wGeneralComp.layout();
		wGeneralTab.setControl(wGeneralComp);

		/////////////////////////////////////////////////////////////
		/// END OF GENERAL TAB
		/////////////////////////////////////////////////////////////

		//////////////////////////
		// START OF FIELDS TAB///
		///
		wFieldsTab=new CTabItem(wTabFolder, SWT.NONE);
		wFieldsTab.setText(BaseMessages.getString(PKG, "StepsMetricsDialog.Group.Fields"));
		Composite wFieldsComp = new Composite(wTabFolder, SWT.NONE);
 		props.setLook(wFieldsComp);
		FormLayout fieldsLayout = new FormLayout();
		fieldsLayout.marginWidth  = 3;
		fieldsLayout.marginHeight = 3;
		wFieldsComp.setLayout(fieldsLayout);
		
		// Stepname line
		wlStepnameField=new Label(wFieldsComp, SWT.RIGHT);
		wlStepnameField.setText(BaseMessages.getString(PKG, "StepsMetricsDialog.Label.StepnameField"));
 		props.setLook(wlStepnameField);
		fdlStepnameField=new FormData();
		fdlStepnameField.left = new FormAttachment(0, 0);
		fdlStepnameField.top  = new FormAttachment(0, margin);
		fdlStepnameField.right= new FormAttachment(middle, -margin);
		wlStepnameField.setLayoutData(fdlStepnameField);
		wStepnameField=new TextVar(transMeta, wFieldsComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
		wStepnameField.setText("");
 		props.setLook(wStepnameField);
		wStepnameField.addModifyListener(lsMod);
		fdStepnameField=new FormData();
		fdStepnameField.left = new FormAttachment(middle, 0);
		fdStepnameField.top  = new FormAttachment(0, margin);
		fdStepnameField.right= new FormAttachment(100, -margin);
		wStepnameField.setLayoutData(fdStepnameField);
		
		// Stepid line
		wlStepidField=new Label(wFieldsComp, SWT.RIGHT);
		wlStepidField.setText(BaseMessages.getString(PKG, "StepsMetricsDialog.Label.StepidField"));
 		props.setLook(wlStepidField);
		fdlStepidField=new FormData();
		fdlStepidField.left = new FormAttachment(0, 0);
		fdlStepidField.top  = new FormAttachment(wStepnameField, margin);
		fdlStepidField.right= new FormAttachment(middle, -margin);
		wlStepidField.setLayoutData(fdlStepidField);
		wStepidField=new TextVar(transMeta, wFieldsComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
		wStepidField.setText("");
 		props.setLook(wStepidField);
		wStepidField.addModifyListener(lsMod);
		fdStepidField=new FormData();
		fdStepidField.left = new FormAttachment(middle, 0);
		fdStepidField.top  = new FormAttachment(wStepnameField, margin);
		fdStepidField.right= new FormAttachment(100, -margin);
		wStepidField.setLayoutData(fdStepidField);
		
		// Linesinput line
		wlLinesinputField=new Label(wFieldsComp, SWT.RIGHT);
		wlLinesinputField.setText(BaseMessages.getString(PKG, "StepsMetricsDialog.Label.LinesinputField"));
 		props.setLook(wlLinesinputField);
		fdlLinesinputField=new FormData();
		fdlLinesinputField.left = new FormAttachment(0, 0);
		fdlLinesinputField.top  = new FormAttachment(wStepidField, margin);
		fdlLinesinputField.right= new FormAttachment(middle, -margin);
		wlLinesinputField.setLayoutData(fdlLinesinputField);
		wLinesinputField=new TextVar(transMeta, wFieldsComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
		wLinesinputField.setText("");
 		props.setLook(wLinesinputField);
		wLinesinputField.addModifyListener(lsMod);
		fdLinesinputField=new FormData();
		fdLinesinputField.left = new FormAttachment(middle, 0);
		fdLinesinputField.top  = new FormAttachment(wStepidField, margin);
		fdLinesinputField.right= new FormAttachment(100, -margin);
		wLinesinputField.setLayoutData(fdLinesinputField);
		
		// Linesoutput line
		wlLinesoutputField=new Label(wFieldsComp, SWT.RIGHT);
		wlLinesoutputField.setText(BaseMessages.getString(PKG, "StepsMetricsDialog.Label.LinesoutputField"));
 		props.setLook(wlLinesoutputField);
		fdlLinesoutputField=new FormData();
		fdlLinesoutputField.left = new FormAttachment(0, 0);
		fdlLinesoutputField.top  = new FormAttachment(wLinesinputField, margin);
		fdlLinesoutputField.right= new FormAttachment(middle, -margin);
		wlLinesoutputField.setLayoutData(fdlLinesoutputField);
		wLinesoutputField=new TextVar(transMeta, wFieldsComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
		wLinesoutputField.setText("");
 		props.setLook(wLinesoutputField);
		wLinesoutputField.addModifyListener(lsMod);
		fdLinesoutputField=new FormData();
		fdLinesoutputField.left = new FormAttachment(middle, 0);
		fdLinesoutputField.top  = new FormAttachment(wLinesinputField, margin);
		fdLinesoutputField.right= new FormAttachment(100, -margin);
		wLinesoutputField.setLayoutData(fdLinesoutputField);
		
		// Linesread line
		wlLinesreadField=new Label(wFieldsComp, SWT.RIGHT);
		wlLinesreadField.setText(BaseMessages.getString(PKG, "StepsMetricsDialog.Label.LinesreadField"));
 		props.setLook(wlLinesreadField);
		fdlLinesreadField=new FormData();
		fdlLinesreadField.left = new FormAttachment(0, 0);
		fdlLinesreadField.top  = new FormAttachment(wLinesoutputField, margin);
		fdlLinesreadField.right= new FormAttachment(middle, -margin);
		wlLinesreadField.setLayoutData(fdlLinesreadField);
		wLinesreadField=new TextVar(transMeta, wFieldsComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
		wLinesreadField.setText("");
 		props.setLook(wLinesreadField);
		wLinesreadField.addModifyListener(lsMod);
		fdLinesreadField=new FormData();
		fdLinesreadField.left = new FormAttachment(middle, 0);
		fdLinesreadField.top  = new FormAttachment(wLinesoutputField, margin);
		fdLinesreadField.right= new FormAttachment(100, -margin);
		wLinesreadField.setLayoutData(fdLinesreadField);
		
		// Linesupdated line
		wlLinesupdatedField=new Label(wFieldsComp, SWT.RIGHT);
		wlLinesupdatedField.setText(BaseMessages.getString(PKG, "StepsMetricsDialog.Label.LinesupdatedField"));
 		props.setLook(wlLinesupdatedField);
		fdlLinesupdatedField=new FormData();
		fdlLinesupdatedField.left = new FormAttachment(0, 0);
		fdlLinesupdatedField.top  = new FormAttachment(wLinesreadField, margin);
		fdlLinesupdatedField.right= new FormAttachment(middle, -margin);
		wlLinesupdatedField.setLayoutData(fdlLinesupdatedField);
		wLinesupdatedField=new TextVar(transMeta, wFieldsComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
		wLinesupdatedField.setText("");
 		props.setLook(wLinesupdatedField);
		wLinesupdatedField.addModifyListener(lsMod);
		fdLinesupdatedField=new FormData();
		fdLinesupdatedField.left = new FormAttachment(middle, 0);
		fdLinesupdatedField.top  = new FormAttachment(wLinesreadField, margin);
		fdLinesupdatedField.right= new FormAttachment(100, -margin);
		wLinesupdatedField.setLayoutData(fdLinesupdatedField);
		
		// Lineswritten line
		wlLineswrittenField=new Label(wFieldsComp, SWT.RIGHT);
		wlLineswrittenField.setText(BaseMessages.getString(PKG, "StepsMetricsDialog.Label.LineswrittenField"));
 		props.setLook(wlLineswrittenField);
		fdlLineswrittenField=new FormData();
		fdlLineswrittenField.left = new FormAttachment(0, 0);
		fdlLineswrittenField.top  = new FormAttachment(wLinesupdatedField, margin);
		fdlLineswrittenField.right= new FormAttachment(middle, -margin);
		wlLineswrittenField.setLayoutData(fdlLineswrittenField);
		wLineswrittenField=new TextVar(transMeta, wFieldsComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
		wLineswrittenField.setText("");
 		props.setLook(wLineswrittenField);
		wLineswrittenField.addModifyListener(lsMod);
		fdLineswrittenField=new FormData();
		fdLineswrittenField.left = new FormAttachment(middle, 0);
		fdLineswrittenField.top  = new FormAttachment(wLinesupdatedField, margin);
		fdLineswrittenField.right= new FormAttachment(100, -margin);
		wLineswrittenField.setLayoutData(fdLineswrittenField);
		
		// Lineserrors line
		wlLineserrorsField=new Label(wFieldsComp, SWT.RIGHT);
		wlLineserrorsField.setText(BaseMessages.getString(PKG, "StepsMetricsDialog.Label.LineserrorsField"));
 		props.setLook(wlLineserrorsField);
		fdlLineserrorsField=new FormData();
		fdlLineserrorsField.left = new FormAttachment(0, 0);
		fdlLineserrorsField.top  = new FormAttachment(wLineswrittenField, margin);
		fdlLineserrorsField.right= new FormAttachment(middle, -margin);
		wlLineserrorsField.setLayoutData(fdlLineserrorsField);
		wLineserrorsField=new TextVar(transMeta, wFieldsComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
		wLineserrorsField.setText("");
 		props.setLook(wLineserrorsField);
		wLineserrorsField.addModifyListener(lsMod);
		fdLineserrorsField=new FormData();
		fdLineserrorsField.left = new FormAttachment(middle, 0);
		fdLineserrorsField.top  = new FormAttachment(wLineswrittenField, margin);
		fdLineserrorsField.right= new FormAttachment(100, -margin);
		wLineserrorsField.setLayoutData(fdLineserrorsField);
		
		// Seconds line
		wlSecondsField=new Label(wFieldsComp, SWT.RIGHT);
		wlSecondsField.setText(BaseMessages.getString(PKG, "StepsMetricsDialog.Label.DurationField"));
 		props.setLook(wlSecondsField);
		fdlSecondsField=new FormData();
		fdlSecondsField.left = new FormAttachment(0, 0);
		fdlSecondsField.top  = new FormAttachment(wLineserrorsField, margin);
		fdlSecondsField.right= new FormAttachment(middle, -margin);
		wlSecondsField.setLayoutData(fdlSecondsField);
		wSecondsField=new TextVar(transMeta, wFieldsComp, SWT.SINGLE | SWT.LEFT | SWT.BORDER);
		wSecondsField.setText("");
 		props.setLook(wSecondsField);
		wSecondsField.addModifyListener(lsMod);
		fdSecondsField=new FormData();
		fdSecondsField.left = new FormAttachment(middle, 0);
		fdSecondsField.top  = new FormAttachment(wLineserrorsField, margin);
		fdSecondsField.right= new FormAttachment(100, -margin);
		wSecondsField.setLayoutData(fdSecondsField);
		
		
		fdFieldsComp=new FormData();
		fdFieldsComp.left  = new FormAttachment(0, 0);
		fdFieldsComp.top   = new FormAttachment(0, 0);
		fdFieldsComp.right = new FormAttachment(100, 0);
		fdFieldsComp.bottom= new FormAttachment(100, 0);
		wFieldsComp.setLayoutData(fdFieldsComp);
		wFieldsComp.layout();
		wFieldsTab.setControl(wFieldsComp);

		/////////////////////////////////////////////////////////////
		/// END OF FIELDS TAB
		/////////////////////////////////////////////////////////////

		
		
		fdTabFolder = new FormData();
		fdTabFolder.left  = new FormAttachment(0, 0);
		fdTabFolder.top   = new FormAttachment(wStepname, margin);
		fdTabFolder.right = new FormAttachment(100, 0);
		fdTabFolder.bottom= new FormAttachment(100, -50);
		wTabFolder.setLayoutData(fdTabFolder);

		// Add listeners
		lsCancel   = new Listener() { public void handleEvent(Event e) { cancel(); } };
		lsGet      = new Listener() { public void handleEvent(Event e) { get();    } };
		lsOK       = new Listener() { public void handleEvent(Event e) { ok();     } };
		
		wCancel.addListener(SWT.Selection, lsCancel);
		wOK.addListener    (SWT.Selection, lsOK    );
		wGet.addListener   (SWT.Selection, lsGet   );
		
		lsDef=new SelectionAdapter() { public void widgetDefaultSelected(SelectionEvent e) { ok(); } };
		
		wStepname.addSelectionListener( lsDef );
		
		// Detect X or ALT-F4 or something that kills this window...
		shell.addShellListener(	new ShellAdapter() { public void shellClosed(ShellEvent e) { cancel(); } } );

		wTabFolder.setSelection(0);
		// Set the shell size, based upon previous time...
		setSize();
		
		getData();
		input.setChanged(changed);
	
		shell.open();
		while (!shell.isDisposed())
		{
				if (!display.readAndDispatch()) display.sleep();
		}
		return stepname;
	}
	private void setStepNames()
	{
		previousSteps=transMeta.getStepNames();
		String[] nextSteps=transMeta.getNextStepNames(stepMeta);
		
		List<String> entries = new ArrayList<String>();
		for(int i=0;i<previousSteps.length;i++) {
			if(!previousSteps[i].equals(stepname)) {	
				if(nextSteps!=null) {
					for(int j=0;j<nextSteps.length;j++) {
						if(!nextSteps[j].equals(previousSteps[i])) entries.add(previousSteps[i]);	
					}
				}
			}
		}
		previousSteps = entries.toArray(new String[entries.size()]);
	}
	private void get()
	{
		wFields.removeAll();
		Table table = wFields.table;

		for(int i=0;i<previousSteps.length;i++) {
			TableItem ti = new TableItem(table, SWT.NONE);
			ti.setText(0, ""+(i+1));
			ti.setText(1,previousSteps[i]);
			ti.setText(2,"0");
			ti.setText(3,BaseMessages.getString(PKG, "System.Combo.No"));
		}
		wFields.removeEmptyRows();
        wFields.setRowNums();
		wFields.optWidth(true);
		
	}
	/**
	 * Copy information from the meta-data input to the dialog fields.
	 */ 
	public void getData()
	{
		Table table = wFields.table;
		if (input.getStepName().length>0) table.removeAll();
		for (int i=0;i<input.getStepName().length;i++)
		{
			TableItem ti = new TableItem(table, SWT.NONE);
			ti.setText(0, ""+(i+1));
			if(input.getStepName()[i]!=null)
			{
				ti.setText(1, input.getStepName()[i]);
				ti.setText(2, String.valueOf(Const.toInt(input.getStepCopyNr()[i],0)));
				ti.setText(3, input.getRequiredStepsDesc(input.getStepRequired()[i]));	
			}
		}
		
		wFields.removeEmptyRows();
        wFields.setRowNums();
		wFields.optWidth(true);
		
		if(input.getStepNameFieldName()!=null) wStepnameField.setText(input.getStepNameFieldName());
		if(input.getStepIdFieldName()!=null) wStepidField.setText(input.getStepIdFieldName());
		if(input.getStepLinesInputFieldName()!=null) wLinesinputField.setText(input.getStepLinesInputFieldName());
		if(input.getStepLinesOutputFieldName()!=null) wLinesoutputField.setText(input.getStepLinesOutputFieldName());
		if(input.getStepLinesReadFieldName()!=null) wLinesreadField.setText(input.getStepLinesReadFieldName());
		if(input.getStepLinesWrittenFieldName()!=null) wLineswrittenField.setText(input.getStepLinesWrittenFieldName());
		if(input.getStepLinesUpdatedFieldName()!=null) wLinesupdatedField.setText(input.getStepLinesUpdatedFieldName());
		if(input.getStepLinesErrorsFieldName()!=null) wLineserrorsField.setText(input.getStepLinesErrorsFieldName());
		if(input.getStepSecondsFieldName()!=null) wSecondsField.setText(input.getStepSecondsFieldName());
		
    wStepname.selectAll();
    wStepname.setFocus();
	}
	
	private void cancel()
	{
		stepname=null;
		input.setChanged(changed);
		dispose();
	}
	
	private void ok()
	{
		if (Const.isEmpty(wStepname.getText())) return;
		
		getInfo(input);
		dispose();
	}
	private void getInfo(StepsMetricsMeta in)  {
		stepname = wStepname.getText(); // return value
		int nrsteps = wFields.nrNonEmpty();
		in.allocate(nrsteps);
		for (int i=0;i<nrsteps;i++)
		{
			TableItem ti = wFields.getNonEmpty(i);
			StepMeta tm=transMeta.findStep(ti.getText(1));
			if(tm!=null){
				in.getStepName()[i] =tm.getName();
				in.getStepCopyNr()[i] =""+Const.toInt(ti.getText(2),0);
				in.getStepRequired()[i]=in.getRequiredStepsCode(ti.getText(3)); 
			}

		}
		
		in.setStepNameFieldName(wStepnameField.getText());
		in.setStepIdFieldName(wStepidField.getText());
		in.setStepLinesInputFieldName(wLinesinputField.getText());
		in.setStepLinesOutputFieldName(wLinesoutputField.getText());
		in.setStepLinesReadFieldName(wLinesreadField.getText());
		in.setStepLinesWrittenFieldName(wLineswrittenField.getText());
		in.setStepLinesUpdatedFieldName(wLinesupdatedField.getText());
		in.setStepLinesErrorsFieldName(wLineserrorsField.getText());
		in.setStepSecondsFieldName(wSecondsField.getText());

	}
}
